home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 49
/
Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso
/
-serious-
/
graphics
/
amicad
/
arexx_english
/
tracespice.amicad
< prev
next >
Wrap
Text File
|
1999-12-06
|
5KB
|
198 lines
/* Tracé d'un fichier généré par Spice dans la fenêtre AmiCAD courante */
options results /* indispensable pour récupérer le résultat des macros */
signal on error /* pour l'interception des erreurs */
signal on syntax
parse arg fichier
if fichier="" then do
'REQFILE("Fichier Spice","RAM:","*_spice")'
fichier=result
end
if fichier="" then exit
if ~open(file, fichier, 'R') then do
'MESSAGE("Fichier de données"+CHR(10)+"non trouvé")'
return
end
titre=readln(file)
if left(titre,6)~="Title:" then do
'MESSAGE("Fichier de type inconnu"+CHR(10)+"En-tête:"+CHR(10)+"'titre'"):TITLE("")'
close(file)
exit
end
'IF(OBJECTS(-1)>0,MARKZONE(0,0,WWIDTH(-1)-1,WHEIGHT(-1)-1):MENU("Effacer"),0)'
'LOCK(-1):SAVEALL(-1):MODE_TRACÉ=DRAWMODE(1):ROTATE(0,0):SETSCALE(0,100,100)'
'TITLE("Lecture des données...")'
date=readln(file)
plotname=readln(file)
'WRITE("'substr(titre,8)||' ('||substr(plotname,11)')",15,15)'
flags=substr(readln(file),8)
nv=readln(file)
nv=substr(nv,16)
np=readln(file)
np=substr(np,13)
command=readln(file)
'WRITE("Spice 'substr(command,10)||' '||substr(date,7)'",15,25)'
v=readln(file)
if v~="Variables:" then do
'UNLOCK(-1):MESSAGE("Déclaration variables"+CHR(10)+"non trouvée"):TITLE("")'
close(file)
exit
end
v.0=readln(file)
parse value v.0 with '09'x num '09'x nom '09'x type
type_abcisse=type
do i=1 to nv-1
v.i=readln(file)
parse value v.i with '09'x num '09'x nom.i '09'x type.i
end
v=readln(file)
if v~="Values:" then do
'UNLOCK(-1):MESSAGE("Déclaration valeurs"+CHR(10)+"non trouvée")'
close(file)
exit
end
do i=0 to np-1
v=readln(file)
if flags = 'real' then do
parse var v p '09'x '09'x valeur
end
else parse var v p '09'x '09'x valeur ',' imaginaire
if p~=i then do
'UNLOCK(-1):MESSAGE("Erreur de lecture"+CHR(10)+"des données"+CHR(10)+"'p'"):TITLE("")'
close(file)
exit
end
xh.i=valeur
im.i=imaginaire
do j=1 to nv-1
v=readln(file)
if flags='real' then parse var v '09'x p
else parse var v '09'x p ',' imaginaire
yd.i.j=p
im.i.j=imaginaire
end
end
/* recherche des limites des ordonnées (axe vertical) */
ymin=yd.0.1
ymax=yd.0.1
do i=0 to np-1
do j=1 to nv-1
if ymin>yd.i.j then ymin=yd.i.j
if ymax<yd.i.j then ymax=yd.i.j
end
end
/* Lecture des dimensions de la fenêtre */
xgauche=70
'WWIDTH(-1)'
largeur=result-xgauche-30
yhaut=40
'WHEIGHT(-1)'
hauteur=result-yhaut-65
/* Tracé du cadre */
'TITLE("Tracé des résultats...")'
call tracer_contour
/* Tracé de la grille */
lc=largeur%10 /* Lignes verticales */
xc=xgauche+lc
do i=1 to 9
'DRAW('xc','yhaut','xc','yhaut'+'hauteur')'
xc=xc+lc
end
yl=hauteur%10 /* Lignes horizontales */
do i=1 to 9
'DRAW('xgauche','yhaut+yl*i','xgauche+largeur','yhaut+yl*i')'
end
/* Tracé des légendes */
NUMERIC FORM ENGINEERING
NUMERIC DIGITS 5
'DRAWMODE(1):ROTATE(0,3)' /* Axe horizontal */
xc=xgauche+5
do i=0 to 10
rang=(np%10)*i
if rang>=np then rang=np-1
t=xh.rang
'WRITE("'left(t-0,6)'",'xc',WHEIGHT(-1)-10)'
xc=xc+lc
end
'WRITE("'type_abcisse'",'xc+15-lc',WHEIGHT(-1)-10)'
if ymax-ymin>1 then do /* Axe vertical */
ymin=(ymin-1)%1
ymax=(ymax+1)%1
end
'ROTATE(0,0)'
yl=hauteur%10
do i=0 to 10
rang=((ymax-ymin)/10)*i+ymin
if abs(rang)<0.00001 then rang=0
'WRITE("'left(rang-0,6,' ')'",'xgauche-50','hauteur-yl*i+yhaut')'
end
/* Tracé des courbes */
pas_valeur=1
pas_x=largeur/np
do j=1 to nv-1
i=0
x0=xgauche
y0=calcul_ordonnee(yd.0.j)
if j<4 then 'DRAWMODE('j')'
else 'DRAWMODE('0-j')'
do while i<np
v=yd.i.j
if result<1 then leave
'DRAW('x0','y0','xgauche+(pas_x*i)%1','calcul_ordonnee(v)')'
x0=xgauche+(pas_x*i)%1
y0=calcul_ordonnee(v)
i=i+pas_valeur
end
'WWIDTH(-1)-'length(nom.j)*8'-20'; xn=result
'DRAW('xn-5','j*10','xn-15','j*10')'
'DRAWMODE(1):WRITE("'nom.j'",'xn','j*10+5')'
end
type_ordonnee=type.1
do j=1 to nv-1
if type_ordonnee~=type.j then do
type_ordonnee=''
leave
end
end
if type_ordonnee~='' then 'WRITE("'type_ordonnee'",'xgauche-50','yhaut-5')'
'UNLOCK(-1):DRAWMODE(MODE_TRACÉ):TITLE("")'
close(file)
exit
calcul_ordonnee: procedure expose ymin ymax hauteur yhaut
parse arg v
return hauteur-((abs(v-ymin)*hauteur/abs(ymax-ymin))%1)+yhaut
tracer_contour:
'SETFILL(0):DRAWMODE(-2):DRAW('xgauche','yhaut','xgauche','yhaut+hauteur'):DRAW('xgauche','yhaut+hauteur','xgauche+largeur','yhaut+hauteur')'
'DRAW('xgauche+largeur','yhaut+hauteur','xgauche+largeur','yhaut'):DRAW('xgauche+largeur','yhaut','xgauche','yhaut'):DRAWMODE(0)'
return
/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
'MESSAGE("Script TracerSpice"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK(-1)'
exit
error:
'MESSAGE("Script TracerSpice"+CHR(10)+"Erreur en ligne 'SIGL'"):UNLOCK(-1)'
exit